<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
<meta name="generator" content="pdoc 0.9.2" />
<title>ascend.resource.mem API documentation</title>
<meta name="description" content="Copyright 2020 Huawei Technologies Co., Ltd
Licensed under the Apache License, Version 2.0 (the &#34;License&#34;);
you may not use this file except in …" />
<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/typography.min.css" integrity="sha256-7l/o7C8jubJiy74VsKTidCy1yBkRtiUGbVkYBylBqUg=" crossorigin>
<link rel="stylesheet preload" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/styles/github.min.css" crossorigin>
<style>:root{--highlight-color:#fe9}.flex{display:flex !important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:30px;overflow:hidden}#sidebar > *:last-child{margin-bottom:2cm}.http-server-breadcrumbs{font-size:130%;margin:0 0 15px 0}#footer{font-size:.75em;padding:5px 30px;border-top:1px solid #ddd;text-align:right}#footer p{margin:0 0 0 1em;display:inline-block}#footer p:last-child{margin-right:30px}h1,h2,h3,h4,h5{font-weight:300}h1{font-size:2.5em;line-height:1.1em}h2{font-size:1.75em;margin:1em 0 .50em 0}h3{font-size:1.4em;margin:25px 0 10px 0}h4{margin:0;font-size:105%}h1:target,h2:target,h3:target,h4:target,h5:target,h6:target{background:var(--highlight-color);padding:.2em 0}a{color:#058;text-decoration:none;transition:color .3s ease-in-out}a:hover{color:#e82}.title code{font-weight:bold}h2[id^="header-"]{margin-top:2em}.ident{color:#900}pre code{background:#f8f8f8;font-size:.8em;line-height:1.4em}code{background:#f2f2f1;padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{background:#f8f8f8;border:0;border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin:1em 0;padding:1ex}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list div{display:flex}#http-server-module-list dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc ul,#index{list-style-type:none;margin:0;padding:0}#index code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index ul{padding:0}#index h4{margin-top:.6em;font-weight:bold}@media (min-width:200ex){#index .two-column{column-count:2}}@media (min-width:300ex){#index .two-column{column-count:3}}dl{margin-bottom:2em}dl dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 0}.name{background:#eee;font-weight:bold;font-size:.85em;padding:5px 10px;display:inline-block;min-width:40%}.name:hover{background:#e0e0e0}dt:target .name{background:var(--highlight-color)}.name > span:first-child{white-space:nowrap}.name.class > span:nth-child(2){margin-left:.4em}.inherited{color:#999;border-left:5px solid #eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt code{background:inherit}.source summary,.git-link-div{color:#666;text-align:right;font-weight:400;font-size:.8em;text-transform:uppercase}.source summary > *{white-space:nowrap;cursor:pointer}.git-link{color:inherit;margin-left:1em}.source pre{max-height:500px;overflow:auto;margin:0}.source pre code{font-size:12px;overflow:visible}.hlist{list-style:none}.hlist li{display:inline}.hlist li:after{content:',\2002'}.hlist li:last-child:after{content:none}.hlist .hlist{display:inline;padding-left:1em}img{max-width:100%}td{padding:0 .5em}.admonition{padding:.1em .5em;margin-bottom:1em}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{background:#aef}.admonition.todo,.admonition.versionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{background:#fd4}.admonition.error,.admonition.danger,.admonition.caution{background:lightpink}</style>
<style media="screen and (min-width: 700px)">@media screen and (min-width:700px){#sidebar{width:30%;height:100vh;overflow:auto;position:sticky;top:0}#content{width:70%;max-width:100ch;padding:3em 4em;border-left:1px solid #ddd}pre code{font-size:1em}.item .name{font-size:1em}main{display:flex;flex-direction:row-reverse;justify-content:flex-end}.toc ul ul,#index ul{padding-left:1.5em}.toc > ul > li{margin-top:.5em}}</style>
<style media="print">@media print{#sidebar h1{page-break-before:always}.source{display:none}}@media print{*{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a[href]:after{content:" (" attr(href) ")";font-size:90%}a[href][title]:after{content:none}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid}}</style>
<link rel="preconnect" href="https://www.google.com">
<script async src="https://cse.google.com/cse.js?cx=017837193012385208679:pey8ky8gdqw"></script>
<style>
.gsc-control-cse {padding:0 !important;margin-top:1em}
body.gsc-overflow-hidden #sidebar {overflow: visible;}
</style>
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/highlight.min.js" integrity="sha256-Uv3H6lx7dJmRfRvH8TH6kJD1TSK1aFcwgx+mdg3epi8=" crossorigin></script>
<script>window.addEventListener('DOMContentLoaded', () => hljs.initHighlighting())</script>
<style>.homelink{display:block;font-size:2em;font-weight:bold;color:#555;padding-bottom:.5em;border-bottom:1px solid silver}.homelink:hover{color:inherit}.homelink img{max-width:20%;max-height:5em;margin:auto;margin-bottom:.3em}</style>
<link rel="canonical" href="https://bazige.github.io/ascend/resource/mem.html">
<link rel="icon" href="https://bazige.github.io/ascend/logo/logo.png"">
</head>
<body>
<main>
<article id="content">
<header>
<h1 class="title">Module <code>ascend.resource.mem</code></h1>
</header>
<section id="section-intro">
<p>Copyright 2020 Huawei Technologies Co., Ltd
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
<a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.</p>
<details class="source">
<summary>
<span>Expand source code</span>
<a href="https://github.com/pdoc3/pdoc/blob/37c907488ff52b174ab602690d1166f28bded9a2/ascend/resource/mem.py#L0-L206" class="git-link">Browse git</a>
</summary>
<pre><code class="python">#!/usr/bin/env python3
# -*- coding: utf-8 -*-
&#34;&#34;&#34;
Copyright 2020 Huawei Technologies Co., Ltd
Licensed under the Apache License, Version 2.0 (the &#34;License&#34;);
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an &#34;AS IS&#34; BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
&#34;&#34;&#34;
import acl

from ..common import const
from ..resource.context import bind_context

def malloc(size, flag):
    &#34;&#34;&#34;Malloc memory according to flag.
    Args:
        size (int): The memory size to malloc
        flag (str): The memory&#39;s location, one of [&#39;DVPP&#39;, &#39;DEVICE&#39;, &#39;HOST&#39;]

    Returns:
        int: The malloc memory&#39;s pointer.
    &#34;&#34;&#34;
    if flag == &#39;DVPP&#39;:
        ptr, ret = acl.media.dvpp_malloc(size)
    elif flag == &#39;DEVICE&#39;:
        ptr, ret = acl.rt.malloc(size, const.ACL_MEM_MALLOC_HUGE_FIRST)
    elif flag == &#39;HOST&#39;:
        ptr, ret = acl.rt.malloc_host(size)

    if ret != const.ACL_SUCCESS:
        ptr = None
        raise ValueError(f&#34;Failed to alloc {flag} memory, return value:{ret}.&#34;)
        
    return ptr

def free(ptr, flag):
    &#34;&#34;&#34;Free memoy at point ptr.
    Args:
        ptr (int): The pointer of memory to be released
        flag (str): The memory&#39;s loaction
    &#34;&#34;&#34;
    if flag == &#39;DVPP&#39;:
        ret = acl.media.dvpp_free(ptr)
    elif flag == &#39;DEVICE&#39;:
        ret = acl.rt.free(ptr)
    elif flag == &#39;HOST&#39;:
        ret = acl.rt.free_host(ptr)
        
    if ret != const.ACL_SUCCESS:
        raise ValueError(f&#34;Failed to free {flag} memory at {ptr}, return value {ret}.&#34;)

def mem_copy(dst_ptr, src_ptr, size, method):
    &#34;&#34;&#34;Copy memory from source to destination.
    Args:
        dst_ptr (int): The pointer of dst memory
        src_ptr (int): The pointer of src memory
        size (int): Memory size to be copyed
        method (str): Copy method, one of [&#39;host_to_device&#39;, &#39;device_to_host&#39;, &#39;device_to_device&#39;,
            &#39;host_to_host&#39;]

    Returns:
        None.
    &#34;&#34;&#34;
    if not isinstance(dst_ptr, int):
        raise TypeError(f&#34;Input dst_ptr expects an int, but got {type(dst_ptr)}.&#34;)

    if not isinstance(src_ptr, int):
        raise TypeError(f&#34;Input dst_ptr expects an int, but got {type(dst_ptr)}.&#34;)

    if not isinstance(size, int):
        raise TypeError(f&#34;Input dst_ptr expects an int, but got {type(dst_ptr)}.&#34;)

    assert size &gt; 0, f&#34;Input size expects a positive value, but got {size}.&#34;

    if method == &#39;host_to_device&#39;:
        ret = acl.rt.memcpy(dst_ptr, size, src_ptr, size,  const.ACL_MEMCPY_HOST_TO_DEVICE)
    elif method == &#39;device_to_host&#39;:
        ret = acl.rt.memcpy(dst_ptr, size, src_ptr, size,  const.ACL_MEMCPY_DEVICE_TO_HOST)
    elif method == &#39;device_to_device&#39;:
        ret = acl.rt.memcpy(dst_ptr, size, src_ptr, size,  const.ACL_MEMCPY_DEVICE_TO_DEVICE)
    elif method == &#39;host_to_host&#39;:
        ret = acl.rt.memcpy(dst_ptr, size, src_ptr, size,  const.ACL_MEMCPY_HOST_TO_HOST)
    else:
        raise ValueError(f&#34;Input memory copy method {method} is not support,&#34; \
            &#34;only support [&#39;host_to_host&#39;, &#39;device_to_device&#39;, &#39;host_to_device&#39;, &#39;device_to_host&#39;].&#34;)
    
    if ret != const.ACL_SUCCESS:
        raise ValueError(f&#34;Copy src memory {src_ptr} to dst {dst_ptr} with {method} failed, return {ret}.&#34;)

def memcpy_h2d(dst_ptr, src_ptr, size):
    &#34;&#34;&#34;Same to function `mem_copy` with method `&#39;host_to_device&#39;`
    &#34;&#34;&#34;    
    return mem_copy(dst_ptr, src_ptr, size, &#39;host_to_device&#39;)

def memcpy_d2h(dst_ptr, src_ptr, size):
    &#34;&#34;&#34;Same to function `mem_copy` with method `&#39;device_to_host&#39;`
    &#34;&#34;&#34;   
    return mem_copy(dst_ptr, src_ptr, size, &#39;device_to_host&#39;)

def memcpy_d2d(dst_ptr, src_ptr, size):
    &#34;&#34;&#34;Same to function `mem_copy` with method `&#39;device_to_device&#39;`
    &#34;&#34;&#34;   
    return mem_copy(dst_ptr, src_ptr, size, &#39;device_to_device&#39;)

def memcpy_h2h(dst_ptr, src_ptr, size):
    &#34;&#34;&#34;Same to function `mem_copy` with method `&#39;host_to_host&#39;`
    &#34;&#34;&#34;   
    return mem_copy(dst_ptr, src_ptr, size, &#39;host_to_host&#39;)



class Memory():
    &#34;&#34;&#34;Define a Memory class to manage memory of device host and dvpp.

    Attributes:
        ptr (a pointer): the memmory ptr
        size (int value): the memory size
        flag (string): one of [&#39;DVPP&#39;, &#39;DEVICE&#39;, &#39;HOST&#39;]

    Typical usage example:
    ```python
    mem = ascend.Memory(context, 32768, flag=&#39;DVPP&#39;)
    print(mem.ptr)
    ```
    &#34;&#34;&#34;
    def __init__(self, context, size, flag=&#34;DEVICE&#34;):
        if not isinstance(size, int):
            raise TypeError(&#39;Memory instance input praram size expects an int value. &#39;
                                f&#39;But received {type(size)}&#39;)
        if size &lt;= 0:
            raise ValueError(&#39;Memory instance input praram size should larger than 0. &#39;
                                f&#39;But received {size}&#39;)

        if flag not in [&#39;DVPP&#39;, &#39;DEVICE&#39;, &#39;HOST&#39;]:
            raise TypeError(&#34;Memory instance input flag expects one of [&#39;DVPP&#39;, &#39;DEVICE&#39;, &#39;HOST&#39;].&#34;)

        # set context
        bind_context(context)

        self.size = size
        self.flag = flag
        self.ptr = malloc(size, flag)

    @classmethod
    def reset(self, ptr, size, value):
        &#34;&#34;&#34;Initial memory with a const value.

        Args:
            ptr (int): Input memory pointer.
            size (int): Input memory size to be reset.
            value (int): The memory value to reset.

        Typical usage example:
        ```python
        pad_val = 0
        ascend.Memory.reset(dst_img.ascend_data, dst_img.nbytes, pad_val)
        ```
        &#34;&#34;&#34;
        if not isinstance(ptr, int):
            raise TypeError(&#34;Input praram &#39;ptr&#39; of func reset expects an int value. &#34;
                                f&#39;But received {type(ptr)}&#39;)
        if not isinstance(size, int):
            raise TypeError(&#34;Input praram &#39;size&#39; of func reset expects an int value. &#34;
                                f&#39;But received {type(size)}&#39;)
        if not isinstance(value, int):
            raise TypeError(&#34;Input praram &#39;value&#39; of func reset expects an int value. &#34;
                                f&#39;But received {type(value)}&#39;)

        ret = acl.rt.memset(ptr, size, value, size)
        if ret != const.ACL_SUCCESS:
            raise ValueError(f&#34;Failed to memset at pointer {ptr}, return value:{ret}.&#34;)
        
    def mem_info(self, attr):
        &#34;&#34;&#34;Get the memory info accoring to attribute att.
        Args:
            attr (int): Input attribute info to get.

        Returns:
            tuple(free, total): The free memory and total memory of device
        
        Typical usage example:
        ```python
        mem = ascend.Memory(context, 32768)
        mem_info = mem.mem_info(0)
        ```
        &#34;&#34;&#34;
        if not isinstance(attr, int):
            raise TypeError(f&#34;Input param expects an int, but got {type(attr)}.&#34;)

        free, total, ret = acl.rt.get_mem_info(attr)
        if ret != const.ACL_SUCCESS:
            raise ValueError(f&#34;Get mem info failed, return {ret}.&#34;)

        return free, total

    def __del__(self):
        if hasattr(self, &#39;ptr&#39;) and self.ptr:
            free(self.ptr, self.flag)</code></pre>
</details>
</section>
<section>
</section>
<section>
</section>
<section>
<h2 class="section-title" id="header-functions">Functions</h2>
<dl>
<dt id="ascend.resource.mem.free"><code class="name flex">
<span>def <span class="ident">free</span></span>(<span>ptr, flag)</span>
</code></dt>
<dd>
<div class="desc"><p>Free memoy at point ptr.</p>
<h2 id="args">Args</h2>
<dl>
<dt><strong><code>ptr</code></strong> :&ensp;<code>int</code></dt>
<dd>The pointer of memory to be released</dd>
<dt><strong><code>flag</code></strong> :&ensp;<code>str</code></dt>
<dd>The memory's loaction</dd>
</dl></div>
<details class="source">
<summary>
<span>Expand source code</span>
<a href="https://github.com/pdoc3/pdoc/blob/37c907488ff52b174ab602690d1166f28bded9a2/ascend/resource/mem.py#L42-L56" class="git-link">Browse git</a>
</summary>
<pre><code class="python">def free(ptr, flag):
    &#34;&#34;&#34;Free memoy at point ptr.
    Args:
        ptr (int): The pointer of memory to be released
        flag (str): The memory&#39;s loaction
    &#34;&#34;&#34;
    if flag == &#39;DVPP&#39;:
        ret = acl.media.dvpp_free(ptr)
    elif flag == &#39;DEVICE&#39;:
        ret = acl.rt.free(ptr)
    elif flag == &#39;HOST&#39;:
        ret = acl.rt.free_host(ptr)
        
    if ret != const.ACL_SUCCESS:
        raise ValueError(f&#34;Failed to free {flag} memory at {ptr}, return value {ret}.&#34;)</code></pre>
</details>
</dd>
<dt id="ascend.resource.mem.malloc"><code class="name flex">
<span>def <span class="ident">malloc</span></span>(<span>size, flag)</span>
</code></dt>
<dd>
<div class="desc"><p>Malloc memory according to flag.</p>
<h2 id="args">Args</h2>
<dl>
<dt><strong><code>size</code></strong> :&ensp;<code>int</code></dt>
<dd>The memory size to malloc</dd>
<dt><strong><code>flag</code></strong> :&ensp;<code>str</code></dt>
<dd>The memory's location, one of ['DVPP', 'DEVICE', 'HOST']</dd>
</dl>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>int</code></dt>
<dd>The malloc memory's pointer.</dd>
</dl></div>
<details class="source">
<summary>
<span>Expand source code</span>
<a href="https://github.com/pdoc3/pdoc/blob/37c907488ff52b174ab602690d1166f28bded9a2/ascend/resource/mem.py#L20-L40" class="git-link">Browse git</a>
</summary>
<pre><code class="python">def malloc(size, flag):
    &#34;&#34;&#34;Malloc memory according to flag.
    Args:
        size (int): The memory size to malloc
        flag (str): The memory&#39;s location, one of [&#39;DVPP&#39;, &#39;DEVICE&#39;, &#39;HOST&#39;]

    Returns:
        int: The malloc memory&#39;s pointer.
    &#34;&#34;&#34;
    if flag == &#39;DVPP&#39;:
        ptr, ret = acl.media.dvpp_malloc(size)
    elif flag == &#39;DEVICE&#39;:
        ptr, ret = acl.rt.malloc(size, const.ACL_MEM_MALLOC_HUGE_FIRST)
    elif flag == &#39;HOST&#39;:
        ptr, ret = acl.rt.malloc_host(size)

    if ret != const.ACL_SUCCESS:
        ptr = None
        raise ValueError(f&#34;Failed to alloc {flag} memory, return value:{ret}.&#34;)
        
    return ptr</code></pre>
</details>
</dd>
<dt id="ascend.resource.mem.mem_copy"><code class="name flex">
<span>def <span class="ident">mem_copy</span></span>(<span>dst_ptr, src_ptr, size, method)</span>
</code></dt>
<dd>
<div class="desc"><p>Copy memory from source to destination.</p>
<h2 id="args">Args</h2>
<dl>
<dt><strong><code>dst_ptr</code></strong> :&ensp;<code>int</code></dt>
<dd>The pointer of dst memory</dd>
<dt><strong><code>src_ptr</code></strong> :&ensp;<code>int</code></dt>
<dd>The pointer of src memory</dd>
<dt><strong><code>size</code></strong> :&ensp;<code>int</code></dt>
<dd>Memory size to be copyed</dd>
<dt><strong><code>method</code></strong> :&ensp;<code>str</code></dt>
<dd>Copy method, one of ['host_to_device', 'device_to_host', 'device_to_device',
'host_to_host']</dd>
</dl>
<h2 id="returns">Returns</h2>
<p>None.</p></div>
<details class="source">
<summary>
<span>Expand source code</span>
<a href="https://github.com/pdoc3/pdoc/blob/37c907488ff52b174ab602690d1166f28bded9a2/ascend/resource/mem.py#L58-L94" class="git-link">Browse git</a>
</summary>
<pre><code class="python">def mem_copy(dst_ptr, src_ptr, size, method):
    &#34;&#34;&#34;Copy memory from source to destination.
    Args:
        dst_ptr (int): The pointer of dst memory
        src_ptr (int): The pointer of src memory
        size (int): Memory size to be copyed
        method (str): Copy method, one of [&#39;host_to_device&#39;, &#39;device_to_host&#39;, &#39;device_to_device&#39;,
            &#39;host_to_host&#39;]

    Returns:
        None.
    &#34;&#34;&#34;
    if not isinstance(dst_ptr, int):
        raise TypeError(f&#34;Input dst_ptr expects an int, but got {type(dst_ptr)}.&#34;)

    if not isinstance(src_ptr, int):
        raise TypeError(f&#34;Input dst_ptr expects an int, but got {type(dst_ptr)}.&#34;)

    if not isinstance(size, int):
        raise TypeError(f&#34;Input dst_ptr expects an int, but got {type(dst_ptr)}.&#34;)

    assert size &gt; 0, f&#34;Input size expects a positive value, but got {size}.&#34;

    if method == &#39;host_to_device&#39;:
        ret = acl.rt.memcpy(dst_ptr, size, src_ptr, size,  const.ACL_MEMCPY_HOST_TO_DEVICE)
    elif method == &#39;device_to_host&#39;:
        ret = acl.rt.memcpy(dst_ptr, size, src_ptr, size,  const.ACL_MEMCPY_DEVICE_TO_HOST)
    elif method == &#39;device_to_device&#39;:
        ret = acl.rt.memcpy(dst_ptr, size, src_ptr, size,  const.ACL_MEMCPY_DEVICE_TO_DEVICE)
    elif method == &#39;host_to_host&#39;:
        ret = acl.rt.memcpy(dst_ptr, size, src_ptr, size,  const.ACL_MEMCPY_HOST_TO_HOST)
    else:
        raise ValueError(f&#34;Input memory copy method {method} is not support,&#34; \
            &#34;only support [&#39;host_to_host&#39;, &#39;device_to_device&#39;, &#39;host_to_device&#39;, &#39;device_to_host&#39;].&#34;)
    
    if ret != const.ACL_SUCCESS:
        raise ValueError(f&#34;Copy src memory {src_ptr} to dst {dst_ptr} with {method} failed, return {ret}.&#34;)</code></pre>
</details>
</dd>
<dt id="ascend.resource.mem.memcpy_d2d"><code class="name flex">
<span>def <span class="ident">memcpy_d2d</span></span>(<span>dst_ptr, src_ptr, size)</span>
</code></dt>
<dd>
<div class="desc"><p>Same to function <code><a title="ascend.resource.mem.mem_copy" href="#ascend.resource.mem.mem_copy">mem_copy()</a></code> with method <code>'device_to_device'</code></p></div>
<details class="source">
<summary>
<span>Expand source code</span>
<a href="https://github.com/pdoc3/pdoc/blob/37c907488ff52b174ab602690d1166f28bded9a2/ascend/resource/mem.py#L106-L109" class="git-link">Browse git</a>
</summary>
<pre><code class="python">def memcpy_d2d(dst_ptr, src_ptr, size):
    &#34;&#34;&#34;Same to function `mem_copy` with method `&#39;device_to_device&#39;`
    &#34;&#34;&#34;   
    return mem_copy(dst_ptr, src_ptr, size, &#39;device_to_device&#39;)</code></pre>
</details>
</dd>
<dt id="ascend.resource.mem.memcpy_d2h"><code class="name flex">
<span>def <span class="ident">memcpy_d2h</span></span>(<span>dst_ptr, src_ptr, size)</span>
</code></dt>
<dd>
<div class="desc"><p>Same to function <code><a title="ascend.resource.mem.mem_copy" href="#ascend.resource.mem.mem_copy">mem_copy()</a></code> with method <code>'device_to_host'</code></p></div>
<details class="source">
<summary>
<span>Expand source code</span>
<a href="https://github.com/pdoc3/pdoc/blob/37c907488ff52b174ab602690d1166f28bded9a2/ascend/resource/mem.py#L101-L104" class="git-link">Browse git</a>
</summary>
<pre><code class="python">def memcpy_d2h(dst_ptr, src_ptr, size):
    &#34;&#34;&#34;Same to function `mem_copy` with method `&#39;device_to_host&#39;`
    &#34;&#34;&#34;   
    return mem_copy(dst_ptr, src_ptr, size, &#39;device_to_host&#39;)</code></pre>
</details>
</dd>
<dt id="ascend.resource.mem.memcpy_h2d"><code class="name flex">
<span>def <span class="ident">memcpy_h2d</span></span>(<span>dst_ptr, src_ptr, size)</span>
</code></dt>
<dd>
<div class="desc"><p>Same to function <code><a title="ascend.resource.mem.mem_copy" href="#ascend.resource.mem.mem_copy">mem_copy()</a></code> with method <code>'host_to_device'</code></p></div>
<details class="source">
<summary>
<span>Expand source code</span>
<a href="https://github.com/pdoc3/pdoc/blob/37c907488ff52b174ab602690d1166f28bded9a2/ascend/resource/mem.py#L96-L99" class="git-link">Browse git</a>
</summary>
<pre><code class="python">def memcpy_h2d(dst_ptr, src_ptr, size):
    &#34;&#34;&#34;Same to function `mem_copy` with method `&#39;host_to_device&#39;`
    &#34;&#34;&#34;    
    return mem_copy(dst_ptr, src_ptr, size, &#39;host_to_device&#39;)</code></pre>
</details>
</dd>
<dt id="ascend.resource.mem.memcpy_h2h"><code class="name flex">
<span>def <span class="ident">memcpy_h2h</span></span>(<span>dst_ptr, src_ptr, size)</span>
</code></dt>
<dd>
<div class="desc"><p>Same to function <code><a title="ascend.resource.mem.mem_copy" href="#ascend.resource.mem.mem_copy">mem_copy()</a></code> with method <code>'host_to_host'</code></p></div>
<details class="source">
<summary>
<span>Expand source code</span>
<a href="https://github.com/pdoc3/pdoc/blob/37c907488ff52b174ab602690d1166f28bded9a2/ascend/resource/mem.py#L111-L114" class="git-link">Browse git</a>
</summary>
<pre><code class="python">def memcpy_h2h(dst_ptr, src_ptr, size):
    &#34;&#34;&#34;Same to function `mem_copy` with method `&#39;host_to_host&#39;`
    &#34;&#34;&#34;   
    return mem_copy(dst_ptr, src_ptr, size, &#39;host_to_host&#39;)</code></pre>
</details>
</dd>
</dl>
</section>
<section>
<h2 class="section-title" id="header-classes">Classes</h2>
<dl>
<dt id="ascend.resource.mem.Memory"><code class="flex name class">
<span>class <span class="ident">Memory</span></span>
<span>(</span><span>context, size, flag='DEVICE')</span>
</code></dt>
<dd>
<div class="desc"><p>Define a Memory class to manage memory of device host and dvpp.</p>
<h2 id="attributes">Attributes</h2>
<dl>
<dt><strong><code>ptr</code></strong> :&ensp;<code>a pointer</code></dt>
<dd>the memmory ptr</dd>
<dt><strong><code>size</code></strong> :&ensp;<code>int value</code></dt>
<dd>the memory size</dd>
<dt><strong><code>flag</code></strong> :&ensp;<code>string</code></dt>
<dd>one of ['DVPP', 'DEVICE', 'HOST']</dd>
</dl>
<p>Typical usage example:</p>
<pre><code class="language-python">mem = ascend.Memory(context, 32768, flag='DVPP')
print(mem.ptr)
</code></pre></div>
<details class="source">
<summary>
<span>Expand source code</span>
<a href="https://github.com/pdoc3/pdoc/blob/37c907488ff52b174ab602690d1166f28bded9a2/ascend/resource/mem.py#L118-L204" class="git-link">Browse git</a>
</summary>
<pre><code class="python">class Memory():
    &#34;&#34;&#34;Define a Memory class to manage memory of device host and dvpp.

    Attributes:
        ptr (a pointer): the memmory ptr
        size (int value): the memory size
        flag (string): one of [&#39;DVPP&#39;, &#39;DEVICE&#39;, &#39;HOST&#39;]

    Typical usage example:
    ```python
    mem = ascend.Memory(context, 32768, flag=&#39;DVPP&#39;)
    print(mem.ptr)
    ```
    &#34;&#34;&#34;
    def __init__(self, context, size, flag=&#34;DEVICE&#34;):
        if not isinstance(size, int):
            raise TypeError(&#39;Memory instance input praram size expects an int value. &#39;
                                f&#39;But received {type(size)}&#39;)
        if size &lt;= 0:
            raise ValueError(&#39;Memory instance input praram size should larger than 0. &#39;
                                f&#39;But received {size}&#39;)

        if flag not in [&#39;DVPP&#39;, &#39;DEVICE&#39;, &#39;HOST&#39;]:
            raise TypeError(&#34;Memory instance input flag expects one of [&#39;DVPP&#39;, &#39;DEVICE&#39;, &#39;HOST&#39;].&#34;)

        # set context
        bind_context(context)

        self.size = size
        self.flag = flag
        self.ptr = malloc(size, flag)

    @classmethod
    def reset(self, ptr, size, value):
        &#34;&#34;&#34;Initial memory with a const value.

        Args:
            ptr (int): Input memory pointer.
            size (int): Input memory size to be reset.
            value (int): The memory value to reset.

        Typical usage example:
        ```python
        pad_val = 0
        ascend.Memory.reset(dst_img.ascend_data, dst_img.nbytes, pad_val)
        ```
        &#34;&#34;&#34;
        if not isinstance(ptr, int):
            raise TypeError(&#34;Input praram &#39;ptr&#39; of func reset expects an int value. &#34;
                                f&#39;But received {type(ptr)}&#39;)
        if not isinstance(size, int):
            raise TypeError(&#34;Input praram &#39;size&#39; of func reset expects an int value. &#34;
                                f&#39;But received {type(size)}&#39;)
        if not isinstance(value, int):
            raise TypeError(&#34;Input praram &#39;value&#39; of func reset expects an int value. &#34;
                                f&#39;But received {type(value)}&#39;)

        ret = acl.rt.memset(ptr, size, value, size)
        if ret != const.ACL_SUCCESS:
            raise ValueError(f&#34;Failed to memset at pointer {ptr}, return value:{ret}.&#34;)
        
    def mem_info(self, attr):
        &#34;&#34;&#34;Get the memory info accoring to attribute att.
        Args:
            attr (int): Input attribute info to get.

        Returns:
            tuple(free, total): The free memory and total memory of device
        
        Typical usage example:
        ```python
        mem = ascend.Memory(context, 32768)
        mem_info = mem.mem_info(0)
        ```
        &#34;&#34;&#34;
        if not isinstance(attr, int):
            raise TypeError(f&#34;Input param expects an int, but got {type(attr)}.&#34;)

        free, total, ret = acl.rt.get_mem_info(attr)
        if ret != const.ACL_SUCCESS:
            raise ValueError(f&#34;Get mem info failed, return {ret}.&#34;)

        return free, total

    def __del__(self):
        if hasattr(self, &#39;ptr&#39;) and self.ptr:
            free(self.ptr, self.flag)</code></pre>
</details>
<h3>Static methods</h3>
<dl>
<dt id="ascend.resource.mem.Memory.reset"><code class="name flex">
<span>def <span class="ident">reset</span></span>(<span>ptr, size, value)</span>
</code></dt>
<dd>
<div class="desc"><p>Initial memory with a const value.</p>
<h2 id="args">Args</h2>
<dl>
<dt><strong><code>ptr</code></strong> :&ensp;<code>int</code></dt>
<dd>Input memory pointer.</dd>
<dt><strong><code>size</code></strong> :&ensp;<code>int</code></dt>
<dd>Input memory size to be reset.</dd>
<dt><strong><code>value</code></strong> :&ensp;<code>int</code></dt>
<dd>The memory value to reset.</dd>
</dl>
<p>Typical usage example:</p>
<pre><code class="language-python">pad_val = 0
ascend.Memory.reset(dst_img.ascend_data, dst_img.nbytes, pad_val)
</code></pre></div>
<details class="source">
<summary>
<span>Expand source code</span>
<a href="https://github.com/pdoc3/pdoc/blob/37c907488ff52b174ab602690d1166f28bded9a2/ascend/resource/mem.py#L150-L177" class="git-link">Browse git</a>
</summary>
<pre><code class="python">@classmethod
def reset(self, ptr, size, value):
    &#34;&#34;&#34;Initial memory with a const value.

    Args:
        ptr (int): Input memory pointer.
        size (int): Input memory size to be reset.
        value (int): The memory value to reset.

    Typical usage example:
    ```python
    pad_val = 0
    ascend.Memory.reset(dst_img.ascend_data, dst_img.nbytes, pad_val)
    ```
    &#34;&#34;&#34;
    if not isinstance(ptr, int):
        raise TypeError(&#34;Input praram &#39;ptr&#39; of func reset expects an int value. &#34;
                            f&#39;But received {type(ptr)}&#39;)
    if not isinstance(size, int):
        raise TypeError(&#34;Input praram &#39;size&#39; of func reset expects an int value. &#34;
                            f&#39;But received {type(size)}&#39;)
    if not isinstance(value, int):
        raise TypeError(&#34;Input praram &#39;value&#39; of func reset expects an int value. &#34;
                            f&#39;But received {type(value)}&#39;)

    ret = acl.rt.memset(ptr, size, value, size)
    if ret != const.ACL_SUCCESS:
        raise ValueError(f&#34;Failed to memset at pointer {ptr}, return value:{ret}.&#34;)</code></pre>
</details>
</dd>
</dl>
<h3>Methods</h3>
<dl>
<dt id="ascend.resource.mem.Memory.mem_info"><code class="name flex">
<span>def <span class="ident">mem_info</span></span>(<span>self, attr)</span>
</code></dt>
<dd>
<div class="desc"><p>Get the memory info accoring to attribute att.</p>
<h2 id="args">Args</h2>
<dl>
<dt><strong><code>attr</code></strong> :&ensp;<code>int</code></dt>
<dd>Input attribute info to get.</dd>
</dl>
<h2 id="returns">Returns</h2>
<p>tuple(free, total): The free memory and total memory of device
Typical usage example:</p>
<pre><code class="language-python">mem = ascend.Memory(context, 32768)
mem_info = mem.mem_info(0)
</code></pre></div>
<details class="source">
<summary>
<span>Expand source code</span>
<a href="https://github.com/pdoc3/pdoc/blob/37c907488ff52b174ab602690d1166f28bded9a2/ascend/resource/mem.py#L179-L200" class="git-link">Browse git</a>
</summary>
<pre><code class="python">def mem_info(self, attr):
    &#34;&#34;&#34;Get the memory info accoring to attribute att.
    Args:
        attr (int): Input attribute info to get.

    Returns:
        tuple(free, total): The free memory and total memory of device
    
    Typical usage example:
    ```python
    mem = ascend.Memory(context, 32768)
    mem_info = mem.mem_info(0)
    ```
    &#34;&#34;&#34;
    if not isinstance(attr, int):
        raise TypeError(f&#34;Input param expects an int, but got {type(attr)}.&#34;)

    free, total, ret = acl.rt.get_mem_info(attr)
    if ret != const.ACL_SUCCESS:
        raise ValueError(f&#34;Get mem info failed, return {ret}.&#34;)

    return free, total</code></pre>
</details>
</dd>
</dl>
</dd>
</dl>
</section>
</article>
<nav id="sidebar">
<header>
<a class="homelink" rel="home" title="ascendfly Home" href="https://gitee.com/ascend-fae/ascendfly">
<img src="https://bazige.github.io/ascend/logo/logo.png" alt=""> ascendfly
</a>
</header>
<div class="gcse-search" style="height: 70px"
data-as_oq="site:bazige.github.io inurl:github.com/ascendfly"
data-gaCategoryParameter="ascend.resource.mem">
</div>
<h1>Index</h1>
<div class="toc">
<ul></ul>
</div>
<ul id="index">
<li><h3>Super-module</h3>
<ul>
<li><code><a title="ascend.resource" href="index.html">ascend.resource</a></code></li>
</ul>
</li>
<li><h3><a href="#header-functions">Functions</a></h3>
<ul class="two-column">
<li><code><a title="ascend.resource.mem.free" href="#ascend.resource.mem.free">free</a></code></li>
<li><code><a title="ascend.resource.mem.malloc" href="#ascend.resource.mem.malloc">malloc</a></code></li>
<li><code><a title="ascend.resource.mem.mem_copy" href="#ascend.resource.mem.mem_copy">mem_copy</a></code></li>
<li><code><a title="ascend.resource.mem.memcpy_d2d" href="#ascend.resource.mem.memcpy_d2d">memcpy_d2d</a></code></li>
<li><code><a title="ascend.resource.mem.memcpy_d2h" href="#ascend.resource.mem.memcpy_d2h">memcpy_d2h</a></code></li>
<li><code><a title="ascend.resource.mem.memcpy_h2d" href="#ascend.resource.mem.memcpy_h2d">memcpy_h2d</a></code></li>
<li><code><a title="ascend.resource.mem.memcpy_h2h" href="#ascend.resource.mem.memcpy_h2h">memcpy_h2h</a></code></li>
</ul>
</li>
<li><h3><a href="#header-classes">Classes</a></h3>
<ul>
<li>
<h4><code><a title="ascend.resource.mem.Memory" href="#ascend.resource.mem.Memory">Memory</a></code></h4>
<ul class="">
<li><code><a title="ascend.resource.mem.Memory.mem_info" href="#ascend.resource.mem.Memory.mem_info">mem_info</a></code></li>
<li><code><a title="ascend.resource.mem.Memory.reset" href="#ascend.resource.mem.Memory.reset">reset</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
</main>
<footer id="footer">
<p><span style="color:#ddd">&#21328;</span></p>
<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
</footer>
</body>
</html>